C++20
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
C++20 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++20 replaced the prior version of the C++ standard, called C++17, and was later replaced by C++23.cite-ref-1[1] The standard was technically finalizedcite-ref-2[2] by WG21 at the meeting in Prague in February 2020,cite-ref-3[3] had its final draft version announced in March 2020,cite-ref-n4859-4-0[4] was approved on 4 September 2020,cite-ref-5[5]cite-ref-6[6] and published in December 2020.cite-ref-7[7]
Contents
• Features
• Language
• Library
• History
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Features
Language
• [=, this] as a lambda capturecite-ref-14[14]
• template parameter lists on lambdascite-ref-15[15]
• three-way comparison using the "spaceship operator", operator <=>
• initialization of an additional variable within a range-based for statementcite-ref-16[16]
• class types in non-type template parameters, also allowing string literals as template parameterscite-ref-21[21]
• removing the need for typename in certain circumstancescite-ref-22[22]
• conditional explicit, allowing the explicit modifier to be contingent on a Boolean expressioncite-ref-25[25]
• signed integers are now defined to be represented using two's complement (signed integer overflow remains undefined behavior)cite-ref-32[32]
• a revised memory modelcite-ref-33[33]
• coroutinescite-ref-36[36]
• constinit keywordcite-ref-constinit-38-0[38]
Library
• ranges (The One Ranges Proposal)cite-ref-39[39]
• atomic smart pointers (such as std::atomic<shared_ptr<T>> and std::atomic<weak_ptr<T>>)cite-ref-41[41]
• std::to_address to convert a pointer to a raw pointercite-ref-42[42]
• calendar and time-zone additions to <chrono>cite-ref-43[43]
• std::span, providing a view to a contiguous array (analogous to std::string_view but span can mutate the referenced sequence)cite-ref-44[44]
• std::erase and std::erase_if, simplifying element erasure for most standard containerscite-ref-45[45]
• <version> headercite-ref-46[46]
• std::bit_cast<> for type casting of object representations, with less verbosity than memcpy() and more ability to exploit compiler internalscite-ref-47[47]
• feature test macroscite-ref-48[48]
• various constexpr library bitscite-ref-49[49]
• smart pointer creation with default initializationcite-ref-50[50]
• contains-method for associative containerscite-ref-51[51]
• prefix and suffix checking for stringscite-ref-52[52]
• std::bind_frontcite-ref-57[57]
New and changed keywords
Eight new keywords added (plus the new "spaceship operator", operator <=>), such as concept, constinit,cite-ref-constinit-38-1[38] consteval, requires (plus changed meaning for export), and char8_t (for UTF-8 support); of the eight new these three co_await, co_return, co_yield, are only for the new coroutine supportcite-ref-59[59] (additionally six previously existing keywords have changed or new meaning added); explicit can take an expression since C++20.cite-ref-60[60] Most of the uses of the volatile keyword have been deprecated.cite-ref-volatile-61-0[61]
In addition to keywords, there are identifiers with special meaning (effectively keywords in certain contexts), including new import and module.
Removed and deprecated
Removed features:cite-ref-63[63]
• The C-derived headers <ccomplex>, <ciso646>, <cstdalign>, <cstdbool> and <ctgmath> were removed, as they serve no purpose in C++. (The corresponding <*.h> headers remain, for compatibility with C.)
• The use of throw clauses was removed.
• Some previously deprecated library features were removed, including std::uncaught_exception, std::raw_storage_iterator, std::is_literal_type, std::is_literal_type_v, std::result_of and std::result_of_t.
Deprecated features:
• Use of comma operator in subscript expressions has been deprecatedcite-ref-open-std-org-64-0[64]
Published as Technical Specifications
• Parallelism TS v2cite-ref-65[65] (including task blocks)
• Reflection TS v1cite-ref-66[66]
• Networking TS v1cite-ref-67[67]
Deferred to a later standard
• Contracts – a new study group (SG21) has been formed to work on a new proposalcite-ref-68[68]
• Metaclassescite-ref-71[71]
• Executorscite-ref-72[72]
• Propertiescite-ref-75[75]
• Extended futurescite-ref-76[76]
Compiler support
Full supportcite-ref-77[77]
• Visual Studio 2019 supports all C++20 features through its /std:c++latest option, as of version 16.10.0.cite-ref-78[78] An option /std:c++20 to enable C++20 mode is added in version 16.11.0.cite-ref-79[79]cite-ref-80[80]
Microsoft's compiler supports not only Windows but also Linux, Android, and iOS. However, for Linux development, it requires the "Visual C++ for Linux Development" extension. cite-ref-81[81]
Partial
• GCC added partial, experimental C++20 support in 2017cite-ref-84[84] in version 8 through the option -std=c++2a. Like Clang, GCC replaced this option with -std=c++20 in version 10. It also has an option to enable GNU extensions in addition to the experimental C++20 support, -std=gnu++20.cite-ref-85[85]
History
Changes applied to the C++20 working draft in July 2017 (Toronto) include:cite-ref-86[86]
• designated initializers
• [=, this] as a lambda capture
• template parameter lists on lambdas
• std::make_shared and std::allocate_shared for arrays
• three-way comparison using the "spaceship operator", operator <=>
• initialization of an additional variable within a range-based for statement
• lambdas in unevaluated contexts
• default constructible and assignable stateless lambdas
• allow pack expansions in lambda init-capture
• string literals as template parameters
• atomic smart pointers (such as std::atomic<shared_ptr<T>> and std::atomic<weak_ptr<T>>)
• std::to_address to convert a pointer to a raw pointer
Changes applied to the C++20 working draft in March 2018 (Jacksonville) include:cite-ref-90[90]
• removing the need for typename in certain circumstances
• new standard attributes [[no_unique_address]], [[likely]] and [[unlikely]]
• calendar and time-zone additions to <chrono>
• std::span, providing a view to a contiguous array (analogous to std::string_view but span can mutate the referenced sequence)
• <version> header
Changes applied to the C++20 working draft in the summer meeting in June 2018 (Rapperswil) include:cite-ref-91[91]
• contracts (later deferred to a later standard)cite-ref-92[92]
• feature test macros
• bit-casting of object representations, with less verbosity than memcpy() and more ability to exploit compiler internals
• conditional explicit, allowing the explicit modifier to be contingent on a Boolean expression
• constexpr virtual functions
Changes applied to the C++20 working draft in the fall meeting in November 2018 (San Diego) include:cite-ref-93[93]
• ranges (The One Ranges Proposal)
• concept terse syntax
• constexpr union, try and catch, dynamic_cast, typeid and std::pointer_traits.
• various constexpr library bits
• immediate functions using the new consteval keyword
• signed integers are now defined to be represented using two's complement (signed integer overflow remains undefined behavior)
• refinements of the contracts facility (access control in contract conditions)cite-ref-94[94] (see list of features deferred to a later standard)
• a revised memory model
• smart pointer creation with default initialization
• modules
• various improvements to structured bindings (interaction with lambda captures, static and thread_local storage duration)
• contracts were removed (see list of features deferred to a later standard)cite-ref-102[102]
• use of comma operator in subscript expressions has been deprecatedcite-ref-open-std-org-64-1[64]
• using scoped enumscite-ref-p1099r5-using-enum-37-1[37]
• DR: minor changes to modulescite-ref-107[107]
• constinit keyword
• changes to concepts (removal of -> Type return-type-requirementscite-ref-108[108])
• DR: [[nodiscard]] effects on constructorscite-ref-109[109]
• The new standard library concepts will not use PascalCase (rather standard_case, as the rest of the standard library)cite-ref-110[110]
• bit operationscite-ref-p0553r4-bit-operations-53-1[53]
• constexpr INVOKEcite-ref-115[115]
• math constantscite-ref-116[116]
• add the <=> operator to the standard librarycite-ref-119[119]
• header units for the standard librarycite-ref-120[120]
• std::source_locationcite-ref-126[126]
• Class Types in Non-Type Template Parameters (NTTP): The restriction of no user-defined operator== allowed has been removed as the meaning of template argument equality has been divorced from operator==.cite-ref-134[134] This allows also for array members in class-type NTTP.
• Floating-point types,cite-ref-135[135] pointers and references and unions and union-like classes (class types containing anonymous unions) are now allowed as NTTP.
• Function identity now also includes trailing requires-clauses (P1971)
• Constrained non-template functions have been removed
• <compare> is now available in freestanding implementationscite-ref-136[136]
• Concept traits have been renamed to follow the renaming of the concepts as a result from the Cologne meeting
• Several fixes and additions to ranges (P1456R1: Move-only views,cite-ref-138[138] P1391R4: Range constructor for std::string_view (constructor from iterator-pair of characters),cite-ref-139[139] P1394R4: Range constructor for std::span<ref>,cite-ref-140[140] P1870R1: forwarding-range<T> is too subtlecite-ref-141[141])
• Initialization for std::atomic<T> has been changed to make it work with default and list initialization,cite-ref-142[142] std::latch and std::barrier can now report the maximum number of threads that the implementation supports through the new member function max()
• std::weak_equality and std::strong_equality have been removed as they are not used anymore
• Algorithms in <numeric> have been made constexpr
• Missing feature-test macros for new or changed features of C++20 have been addedcite-ref-143[143]
References
cite-note-11. ↑ "The Standard". isocpp.org. Archived from the original on 19 September 2020. Retrieved 7 September 2020.
cite-note-22. ↑ citerefsutter2019Sutter, Herb (2019-10-01). "P1000R3: C++ IS schedule" (PDF). Archived (PDF) from the original on 2019-11-14. Retrieved 2020-02-13.
cite-note-33. ↑ citerefdus-kov-2019Dusíková, Hana (2019-11-06). "N4817: 2020 Prague Meeting Invitation and Information" (PDF). Archived (PDF) from the original on 2019-12-29. Retrieved 2020-02-13.
cite-note-n4859-44. ↑ "N4859 Editors' Report -- Programming Languages -- C++". Archived from the original on 2022-12-09. Retrieved 2023-09-22.
cite-note-55. ↑ "Current Status". isocpp.org. Archived from the original on 8 September 2020. Retrieved 7 September 2020.
cite-note-66. ↑ "C++20 Approved -- Herb Sutter". isocpp.org. Archived from the original on 11 September 2020. Retrieved 8 September 2020.
cite-note-77. ↑ "ISO/IEC 14882:2020". Archived from the original on 2020-12-16. Retrieved 2020-12-16.
cite-note-88. ↑ "Why does the C++ standard ship every three years?". 13 July 2019. Archived from the original on 13 July 2019. Retrieved 19 July 2019.
cite-note-99. ↑ "P0592R0: To boldly suggest an overall plan for C++20". Archived from the original on 2017-03-08. Retrieved 2017-05-06.
cite-note-1010. ↑ "P0606R0: Concepts Are Ready" (PDF). Archived (PDF) from the original on 2017-03-28. Retrieved 2017-05-06.
cite-note-1111. ↑ "P1141R1 - Yet another approach for constrained declarations". Archived from the original on 2018-11-11. Retrieved 2018-11-11.
cite-note-1212. ↑ "N4720: Working Draft, Extensions to C++ for Modules" (PDF). Archived (PDF) from the original on 2019-04-30. Retrieved 2019-04-30.
cite-note-1313. ↑ citereftim-shenrichard-smithTim Shen; Richard Smith. "Designated Initialization Wording". Archived from the original on 2017-10-15. Retrieved 2017-07-16.
cite-note-1414. ↑ citerefthomas-k-ppeThomas Köppe. "Allow lambda capture [=, this]". Archived from the original on 2019-02-09. Retrieved 2017-07-16.
cite-note-1515. ↑ "Familiar template syntax for generic lambdas". Archived from the original on 2018-11-21. Retrieved 2017-07-16.
cite-note-1616. ↑ "Range-based for statements with initializer". Archived from the original on 2017-04-06. Retrieved 2019-10-30.
cite-note-0-1717. ↑ "Trip Report: C++ Standards Meeting in Albuquerque, November 2017". There's Waldo!. 2017-11-20. Archived from the original on 2017-12-11. Retrieved 2017-12-11.
cite-note-1818. ↑ "Wording for lambdas in unevaluated contexts" (PDF). Archived (PDF) from the original on 2017-12-12. Retrieved 2017-12-11.
cite-note-1919. ↑ "Default constructible and assignable stateless lambdas" (PDF). Archived (PDF) from the original on 2017-12-12. Retrieved 2017-12-11.
cite-note-2020. ↑ "Pack expansion in lambda init-capture". www.open-std.org. Archived from the original on 2020-02-14. Retrieved 2017-12-11.
cite-note-2121. ↑ "Class Types in Non-Type Template Parameters" (PDF). www.open-std.org. 2018-06-06. Archived (PDF) from the original on 2022-02-05. Retrieved 2022-02-18.
cite-note-2222. ↑ citerefnina-rannsdaveed-vandevoordeNina Ranns; Daveed Vandevoorde. "Down with typename!". Archived from the original on 2018-04-22. Retrieved 2019-05-18.
cite-note-2323. ↑ "Language support for empty objects". Archived from the original on 2018-04-17. Retrieved 2019-08-04.
cite-note-2424. ↑ "Proposed wording for likely and unlikely attributes (Revision 5)". Archived from the original on 2018-05-13. Retrieved 2019-05-18.
cite-note-2525. ↑ "explicit(bool)". www.open-std.org. Archived from the original on 2018-07-20. Retrieved 2018-11-13.
cite-note-2626. ↑ "Allowing Virtual Function Calls in Constant Expressions". www.open-std.org. Archived from the original on 2018-06-11. Retrieved 2019-03-11.
cite-note-2727. ↑ "P1330R0 - Changing the active member of a union inside constexpr". Archived from the original on 2019-07-26. Retrieved 2019-07-26.
cite-note-2828. ↑ "P1002R0 - Try-catch blocks in constexpr functions" (PDF). Archived (PDF) from the original on 2018-11-11. Retrieved 2018-11-11.
cite-note-2929. ↑ "P1327R0 - Allowing dynamic_cast, polymorphic typeid in Constant Expressions". Archived from the original on 2019-07-26. Retrieved 2019-07-26.
cite-note-3030. ↑ "P1006R1 - Constexpr in std::pointer_traits" (PDF). Archived (PDF) from the original on 2018-11-11. Retrieved 2018-11-11.
cite-note-3131. ↑ "P1073R2 - Immediate functions". Archived from the original on 2018-10-26. Retrieved 2018-11-11.
cite-note-3232. ↑ "P1236R0: Alternative Wording for P0907R4 Signed Integers are Two's Complement". Archived from the original on 2018-11-11. Retrieved 2018-11-11.
cite-note-3333. ↑ "P0668R4: Revising the C++ memory model". Archived from the original on 2018-11-11. Retrieved 2018-11-11.
cite-note-3434. ↑ "P1091R1: Extending structured bindings to be more like variable declarations". www.open-std.org. Archived from the original on 2019-01-26. Retrieved 2019-02-24.
cite-note-3535. ↑ "P1091R2: Extending structured bindings to be more like variable declarations". www.open-std.org. Archived from the original on 2019-01-26. Retrieved 2019-02-24.
cite-note-3636. ↑ "N4649: Working Draft, Technical Specification for C++ Extensions for Coroutines" (PDF). Archived (PDF) from the original on 2017-05-16. Retrieved 2017-05-06.
cite-note-p1099r5-using-enum-3737. ↑ "P1099R5: Using Enum". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-constinit-3838. ↑ "P1143R2: Adding the constinit keyword". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-3939. ↑ "P0896R3" (PDF). Archived (PDF) from the original on 2018-11-11. Retrieved 2018-11-11.
cite-note-4040. ↑ "Extending make_shared to Support Arrays". Archived from the original on 2017-09-06. Retrieved 2020-02-12.
cite-note-4242. ↑ "Utility to convert a pointer to a raw pointer". Archived from the original on 2018-02-20. Retrieved 2020-02-12.
cite-note-4343. ↑ citerefhoward-e-hinnanttomasz-kami-skiHoward E. Hinnant; Tomasz Kamiński. "Extending <chrono> to Calendars and Time Zones". Archived from the original on 2018-05-13. Retrieved 2019-05-18.
cite-note-4444. ↑ citerefneil-macintoshstephan-t-lavavejNeil MacIntosh; Stephan T. Lavavej. "span: bounds-safe views for sequences of objects". Archived from the original on 2019-05-18. Retrieved 2019-05-18.
cite-note-4545. ↑ citerefalisdair-meredithstephan-t-lavavej2018Alisdair Meredith; Stephan T. Lavavej (2018-10-04). "Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20". Archived from the original on 2021-03-08. Retrieved 2020-12-14.
cite-note-4646. ↑ citerefalan-talbotAlan Talbot. "<version>". Archived from the original on 2019-05-18. Retrieved 2019-05-18.
cite-note-4747. ↑ "Bit-casting object representations". www.open-std.org. Archived from the original on 2018-08-18. Retrieved 2018-11-10.
cite-note-4848. ↑ "Integrating feature-test macros into the C++ WD (rev. 2)". www.open-std.org. Archived from the original on 2018-07-20. Retrieved 2018-11-10.
cite-note-4949. ↑ "P1032R1 - Misc constexpr bits". Archived from the original on 2018-10-26. Retrieved 2018-11-11.
cite-note-5050. ↑ "Smart pointer creation with default initialization". Archived from the original on 2019-01-26. Retrieved 2020-02-12.
cite-note-5151. ↑ citerefmikhail-maltsevMikhail Maltsev. "P0458R2: Checking for Existence of an Element in Associative Containers". Archived from the original on 2022-01-16. Retrieved 2022-01-02.
cite-note-5252. ↑ citerefmikhail-maltsevMikhail Maltsev. "P0457R2: String Prefix and Suffix Checking". Archived from the original on 2022-05-18. Retrieved 2025-06-22.
cite-note-p0553r4-bit-operations-5353. ↑ "P0553R4: Bit operations". www.open-std.org. 2019-07-20. Archived from the original on 2019-07-20. Retrieved 2019-07-20.
cite-note-5454. ↑ "P0556R3: Integral power-of-2 operations". www.open-std.org. 2018-06-06. Archived from the original on 2019-06-26. Retrieved 2020-08-08.
cite-note-5555. ↑ "P1355R2 Exposing a narrow contract for ceil2". www.open-std.org. 2019-06-11. Archived from the original on 2019-08-05. Retrieved 2020-08-08.
cite-note-5656. ↑ "On the names of low-level bit manipulation functions" (PDF). www.open-std.org. 2020-02-11. Archived (PDF) from the original on 2020-03-24. Retrieved 2020-08-08.
cite-note-5757. ↑ citereftomasz-kami-ski2017Tomasz Kamiński (2017-11-09). "Simplified partial function application". Archived from the original on 2020-09-28. Retrieved 2020-11-08.
cite-note-5858. ↑ "P1643R1: Add wait/notify to atomic_ref<T>". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-5959. ↑ "C++ keywords - cppreference.com". en.cppreference.com. Archived from the original on 2012-03-19. Retrieved 2019-08-04.
cite-note-6060. ↑ "explicit specifier - cppreference.com". en.cppreference.com. Archived from the original on 2012-02-21. Retrieved 2019-08-04.
cite-note-volatile-6161. ↑ "P1152R4: Deprecating volatile". www.open-std.org. 2019-07-20. Archived from the original on 2019-06-23. Retrieved 2019-07-20.
cite-note-6262. ↑ "attribute specifier sequence(since C++11) - cppreference.com". en.cppreference.com. Archived from the original on 2012-07-05. Retrieved 2019-08-04.
cite-note-6363. ↑ "Working Draft, Standard for Programming Language C++ (Annex C, §C.1)" (PDF). Archived (PDF) from the original on 2020-04-27. Retrieved 2020-11-18.
cite-note-open-std-org-6464. ↑ "P1161R2: Deprecate uses of the comma operator in subscripting expressions". www.open-std.org. Archived from the original on 2019-07-20. Retrieved 2019-07-20.
cite-note-6565. ↑ "C++ Extensions for Parallelism Version 2". Archived (PDF) from the original on 2022-09-21. Retrieved 2019-07-09.
cite-note-6666. ↑ "C++ Extensions for Reflection". Archived (PDF) from the original on 2022-09-21. Retrieved 2019-07-09.
cite-note-6767. ↑ "C++ Extensions for Networking". Archived (PDF) from the original on 2022-09-21. Retrieved 2019-07-09.
cite-note-6868. ↑ citerefsutter2019Sutter, Herb (2019-07-20). "Trip report: Summer ISO C++ standards meeting (Cologne)". Sutter's Mill. Archived from the original on 2020-04-17. Retrieved 2019-07-21.
cite-note-6969. ↑ "Reflections on the reflection proposals - Meeting C++". meetingcpp.com. Archived from the original on 2017-06-23. Retrieved 2017-06-30.
cite-note-7070. ↑ "Static reflection". www.open-std.org. Archived from the original on 2020-02-22. Retrieved 2018-11-10.
cite-note-7171. ↑ citerefherb-sutterHerb Sutter. "Metaclasses" (PDF). Archived (PDF) from the original on 2020-11-11. Retrieved 2017-07-23.
cite-note-7272. ↑ "A Unified Executors Proposal for C++". www.open-std.org. Archived from the original on 2020-02-20. Retrieved 2019-02-24.
cite-note-7373. ↑ "N4771: Working Draft, C++ Extensions for Networking" (PDF). Archived (PDF) from the original on 2020-04-19. Retrieved 2019-03-23.
cite-note-7474. ↑ "ISO/IEC TS 19216:2018 Programming Languages -- C++ Extensions for Networking". Archived from the original on 2019-01-15. Retrieved 2018-12-17.
cite-note-7575. ↑ "A General Property Customization Mechanism". www.open-std.org. Archived from the original on 2020-01-19. Retrieved 2019-02-24.
cite-note-7676. ↑ "A Unified Futures Proposal for C++". Archived from the original on 2022-09-21. Retrieved 2019-07-08.
cite-note-7777. ↑ "C++ compiler support - cppreference.com". en.cppreference.com. Archived from the original on 2022-08-08. Retrieved 2022-08-12.
cite-note-7878. ↑ citerefjawiddisjawiddis. "Visual Studio 2019 version 16.10 Release Notes". docs.microsoft.com. Archived from the original on 2021-08-11. Retrieved 2021-07-13.
cite-note-7979. ↑ "MSVC C++20 and the /std:c++20 Switch". docs.microsoft.com. 2 September 2021. Archived from the original on 2021-09-06. Retrieved 2021-09-07.
cite-note-8080. ↑ Visual Studio documentation for Microsoft C++, Microsoft Docs, 2022-04-19, archived from the original on 2022-04-19, retrieved 2022-04-19
cite-note-8181. ↑ "Visual Studio 2019 Compatibility". docs.microsoft.com. Archived from the original on 2020-06-03. Retrieved 2022-08-12.
cite-note-8282. ↑ "Clang - C++ Programming Language Status". clang.llvm.org. Archived from the original on 2013-07-04. Retrieved 2022-04-19.
cite-note-8383. ↑ "C++ compiler support - cppreference.com". en.cppreference.com. Archived from the original on 2020-10-03. Retrieved 2020-10-10.
cite-note-8484. ↑ "Andrew Sutton - [PATCH] Add -std=c++2a". gcc.gnu.org. Archived from the original on 2021-03-01. Retrieved 2022-04-19.
cite-note-8585. ↑ "C++ Standards Support in GCC - GNU Project". gcc.gnu.org. Archived from the original on 2022-04-20. Retrieved 2022-04-19.
cite-note-8686. ↑ citerefherb-sutter2017Herb Sutter (15 July 2017). "Trip report: Summer ISO C++ standards meeting (Toronto)". Archived from the original on 2017-08-06. Retrieved 2017-07-16.
cite-note-8787. ↑ citerefandrew-suttonbjarne-stroustrup2013Andrew Sutton; Bjarne Stroustrup (2013-02-24). "Concepts Lite: Constraining Templates with Predicates". isocpp.org. Archived from the original on 2021-01-16. Retrieved 2021-01-13.
cite-note-8888. ↑ citerefherb-sutter2017Herb Sutter (11 November 2017). "Trip report: Fall ISO C++ standards meeting (Albuquerque)". Archived from the original on 2019-02-13. Retrieved 2017-12-04.
cite-note-9090. ↑ citerefbotond-ballo2018Botond Ballo (28 March 2018). "Trip Report: C++ Standards Meeting in Jacksonville, March 2018". Archived from the original on 2019-05-18. Retrieved 2019-05-18.
cite-note-9191. ↑ citerefherb-sutter2018Herb Sutter (2 July 2018). "Trip report: Summer ISO C++ standards meeting (Rapperswil)". Archived from the original on 2020-05-23. Retrieved 2018-11-10.
cite-note-9292. ↑ "Support for contract based programming in C++". www.open-std.org. Archived from the original on 2020-01-15. Retrieved 2018-11-10.
cite-note-9393. ↑ fall meeting in November 2018
cite-note-9494. ↑ "P1289R0 - Access control in contract conditions" (PDF). Archived (PDF) from the original on 2018-11-11. Retrieved 2018-11-11.
cite-note-9595. ↑ winter meeting in February 2019
cite-note-9696. ↑ "r/cpp - 2019-02 Kona ISO C++ Committee Trip Report (C++20 design is complete; Modules in C++20; Coroutines in C++20; Reflection TS v1 published; work begins on a C++ Ecosystem Technical Report)". reddit. 23 February 2019. Archived from the original on 2019-02-23. Retrieved 2019-02-24.
cite-note-9797. ↑ "Trip report: Winter ISO C++ standards meeting (Kona)". Sutter's Mill. 2019-02-23. Archived from the original on 2019-02-24. Retrieved 2019-02-24.
cite-note-9898. ↑ "2019 Cologne Meeting Invitation and Information" (PDF).
cite-note-9999. ↑ "r/cpp - 2019-07 Cologne ISO C++ Committee Trip Report — 🚀 The C++20 Eagle has Landed 🚀 (C++20 Committee Draft shipped; Contracts Moved From C++20 to a Study Group; 'std::format' in C++20; C++20 Synchronization Library)". reddit. 20 July 2019. Archived from the original on 2020-04-20. Retrieved 2019-09-15.
cite-note-100100. ↑ citerefbotond-ballo2019Botond Ballo (26 July 2019). "Trip Report: C++ Standards Meeting in Cologne, July 2019". Archived from the original on 2020-02-26. Retrieved 2019-08-05.
cite-note-101101. ↑ citerefsutter2019Sutter, Herb (20 July 2019). "Trip report: Summer ISO C++ standards meeting (Cologne)". Archived from the original on 2020-04-17. Retrieved 2019-07-21.
cite-note-102102. ↑ citerefjosuttisJosuttis, Nicolai. "P1823R0: Remove Contracts from C++20" (PDF). Archived (PDF) from the original on 2020-08-13. Retrieved 2019-08-20.
cite-note-103103. ↑ "Permitting trivial default initialization in constexpr contexts" (PDF). Archived (PDF) from the original on 2020-10-19. Retrieved 2019-07-20.
cite-note-104104. ↑ "P1668R1: Enabling Constexpr Intrinsics By Permitting Unevaluated inline-asm in Constexpr Functions". www.open-std.org. Archived from the original on 2020-01-19. Retrieved 2019-07-20.
cite-note-105105. ↑ "P1186R3: When do you actually use <=>?". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-106106. ↑ "P1630R1: Spaceship needs a tune-up". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-107107. ↑ "P1766R1: Mitigating minor modules maladies". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-108108. ↑ "P1452R2: On the non-uniform semantics of return-type-requirements". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-109109. ↑ "P1771R1: nodiscard for constructors" (PDF). www.open-std.org. 2019-07-20. Archived (PDF) from the original on 2022-09-21. Retrieved 2019-07-20.
cite-note-110110. ↑ "P1754R1: Rename concepts to standard_case for C++20, while we still can" (PDF). www.open-std.org. 2019-07-20. Archived (PDF) from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-111111. ↑ "P0645R10: Text Formatting". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-112112. ↑ "std::format in C++20". www.zverovich.net. 2019-07-23. Archived from the original on 2019-07-23. Retrieved 2019-09-15.
cite-note-113113. ↑ "P1361R2: Integration of chrono with text formatting" (PDF). www.open-std.org. 2019-07-20. Archived (PDF) from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-114114. ↑ "P1652R1: Printf corner cases in std::format". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-115115. ↑ "P1965R2: constexpr INVOKE". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-116116. ↑ "P0631R8: Math Constants" (PDF). www.open-std.org. 2019-07-20. Archived (PDF) from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-117117. ↑ "P1643R1: Add wait/notify to atomic_ref<T>". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-118118. ↑ "P1664R0: Add wait/notify to atomic<shared_ptr<T>>". www.open-std.org. 2019-07-20. Archived from the original on 2021-11-05. Retrieved 2019-07-20.
cite-note-119119. ↑ "P1614R2: The Mothership has Landed - Adding <=> to the Library". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-120120. ↑ "P1502R1: Standard library header units for C++20". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-121121. ↑ "P1135R6: The C++20 Synchronization Library". www.open-std.org. 2019-07-20. Archived from the original on 2019-08-20. Retrieved 2019-07-20.
cite-note-122122. ↑ "P0514R4: Efficient concurrent waiting for C++20" (PDF). Archived (PDF) from the original on 2018-08-18. Retrieved 2019-07-20.
cite-note-123123. ↑ "P0666R2: Revised Latches and Barriers for C++20" (PDF). Archived (PDF) from the original on 2018-08-18. Retrieved 2019-07-20.
cite-note-124124. ↑ "P0995R1: Improving atomic_flag". Archived from the original on 2019-07-20. Retrieved 2019-07-20.
cite-note-125125. ↑ "P1285R0: Don't Make C++ Unimplementable On Small CPUs". Archived from the original on 2019-07-15. Retrieved 2019-07-20.
cite-note-126126. ↑ "P1208R6: Adopt source_location from Library Fundamentals V3 for C++20" (PDF). Archived (PDF) from the original on 2019-08-20. Retrieved 2019-08-20.
cite-note-127127. ↑ "P0980R1: Making std::string constexpr" (PDF). Archived (PDF) from the original on 2020-09-29. Retrieved 2020-07-30.
cite-note-128128. ↑ "P1004R2: Making std::vector constexpr" (PDF). Archived (PDF) from the original on 2020-09-28. Retrieved 2020-07-30.
cite-note-129129. ↑ "P0660R10: Stop Token and Joining Thread" (PDF). Archived (PDF) from the original on 2019-08-20. Retrieved 2019-08-20.
cite-note-130130. ↑ fall meeting in November 2019
cite-note-131131. ↑ "r/cpp - 2019-11 Belfast ISO C++ Committee Trip Report — Started Processing Feedback on the C++20 Committee Draft; ABI Review Group Formed". reddit. 9 November 2019. Archived from the original on 2019-11-09. Retrieved 2019-11-09.
cite-note-132132. ↑ citerefsutter2019Sutter, Herb (2019-11-09). "Trip report: Autumn ISO C++ standards meeting (Belfast)". Sutter's Mill. Archived from the original on 2019-11-09. Retrieved 2019-11-09.
cite-note-133133. ↑ citerefbotondballo2019botondballo (2019-11-15). "Trip Report: C++ Standards Meeting in Belfast, November 2019". There's Waldo!. Archived from the original on 2019-11-20. Retrieved 2019-11-24.
cite-note-134134. ↑ "P1907R0: Inconsistencies with non-type template parameters". www.open-std.org. 2019-10-07. Archived from the original on 2019-11-09. Retrieved 2019-11-09.
cite-note-135135. ↑ "P1714: NTTP are incomplete without float, double, and long double! (Revision 1)". www.open-std.org. 2019-07-19. Archived from the original on 2019-11-09. Retrieved 2019-11-09.
cite-note-136136. ↑ "P1855R=: Make <compare> freestanding". www.open-std.org. 2019-10-05. Archived from the original on 2019-11-09. Retrieved 2019-11-09.
cite-note-137137. ↑ "P1872R0: span should have size_type not index_type" (PDF). www.open-std.org. 2019-09-16. Archived (PDF) from the original on 2019-11-09. Retrieved 2019-11-09.
cite-note-138138. ↑ "P1456: Move-only views" (PDF). www.open-std.org. 2019-01-25. Archived (PDF) from the original on 2019-11-09. Retrieved 2019-11-09.
cite-note-139139. ↑ "P1391: Range constructor for std::string_view" (PDF). www.open-std.org. Archived (PDF) from the original on 2020-01-04. Retrieved 2019-11-09.
cite-note-140140. ↑ "P1394: Range constructor for std::span" (PDF). www.open-std.org. 2019-08-02. Archived (PDF) from the original on 2019-11-09. Retrieved 2019-11-09.
cite-note-141141. ↑ "P1870R1: forwarding-range<T> is too subtle". www.open-std.org. 6 October 2019. Archived from the original on 2019-11-09. Retrieved 2019-11-09.
cite-note-142142. ↑ "P0883: Fixing Atomic Initialization" (PDF). www.open-std.org. 2018-06-05. Archived (PDF) from the original on 2019-11-09. Retrieved 2019-11-09.
cite-note-143143. ↑ "Missing feature-test macros 2018-2019". www.open-std.org. 2019-10-06. Archived from the original on 2019-11-09. Retrieved 2019-11-09.
External links
• Link to purchase ISO/IEC 14882:2020 from the ISO online store.
• N4860, the final draft version of the standard.
• JTC1/SC22/WG21 – the ISO/IEC C++ Standard Working Group (a.k.a. the C++ Standards Committee)
• Ranges (range-v3) GitHub repository, by Eric Niebler